from django.db import models
from django.contrib.auth import get_user_model
User = get_user_model()
from django.core.exceptions import ValidationError
from django.utils import timezone
import os
from ckeditor_uploader.fields import RichTextUploadingField  # 带上传功能的富文本字段
# Create your models here.

def validate_file_size(value):
    """验证文件大小不超过5MB"""
    filesize = value.size
    if filesize > 5 * 1024 * 1024:  # 5MB
        raise ValidationError("文件大小不能超过5MB")
    allowed_extensions = ['.pdf', '.img', '.jpg', '.webp', '.docx', '.doc']
    ext = os.path.splitext(value.name)[1].lower()
    if ext not in allowed_extensions:
        raise ValidationError('只允许上传常规文件')
    return value
class RandDModel(models.Model):


    name = models.CharField(max_length=50, verbose_name='项目名称', default='',null=False, blank=False)

    content = RichTextUploadingField(verbose_name='内容')
    create_at = models.DateTimeField(verbose_name='创建日期', default=timezone.now)  # 默认为当前时间
    # 更新时间：每次保存（包括首次）时自动更新为当前时间
    update_at = models.DateTimeField(verbose_name='更新日期', auto_now=True)
    class Meta:
        verbose_name='研发记录'
        verbose_name_plural = '研发记录'  # 自定义复数形式，与单数相同
    def __str__(self):
        return self.name

class RandDFileModel(models.Model):
    # 将原来的standard字符字段改为外键关联到StandardModel
    randd = models.ForeignKey(
        RandDModel,
        on_delete=models.CASCADE,
        null=False,  # 数据库层面不允许为NULL
        blank=False,
        verbose_name='研发记录'
    )

    # 先定义动态 upload_to 函数（关键）
    def dynamic_upload_path(instance, filename):

        # 拼接路径（将特殊字符替换为下划线，避免路径错误）
        return f"uploads/files/quality/randd/{instance.pk}/{filename}"
    file = models.FileField(upload_to=dynamic_upload_path, validators=[validate_file_size],
                                   verbose_name='附件')


    create_at = models.DateTimeField(verbose_name='创建日期', default=timezone.now)  # 默认为当前时间
    # 更新时间：每次保存（包括首次）时自动更新为当前时间
    update_at = models.DateTimeField(verbose_name='更新日期', auto_now=True)

    class Meta:
        verbose_name = '附件'
        verbose_name_plural = '附件'  # 自定义复数形式，与单数相同